#include <stdio.h>
typedef struct note
{
    int x;
    int y;
    int f;
    int s;
} note;
int main()
{
    note que[2501];
    int a[51][51] = {0}, book[51][51] = {0};
    int next[4][2] = {
        {0, 1},
        {1, 0},
        {0, -1},
        {-1, 0}};
    int head, tail;
    int i, j, k, n, m, startx, starty, p, q, tx, ty, flag;
    scanf("%d%d", &n, &m);
    for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++)
            scanf("%d", &a[i][j]);
    scanf("%d%d%d%d", &startx, &starty, &p, &q);
    head = 1;
    tail = 1;
    que[tail].x = startx;
    que[tail].y = starty;
    que[tail].f = 0;
    que[tail].s = 0;
    tail++;
    book[startx][starty] = 1;
    flag = 0;
    while (head < tail)
    {
        for (k = 0; k <= 3; k++)
        {
            tx = que[head].x + next[k][0];
            ty = que[head].y + next[k][1];
            if (tx < 1 || tx > n || ty < 1 || ty > m)
                continue;
            if (a[tx][ty] == 0 && book[tx][ty] == 0)
            {
                book[tx][ty] = 1;
                que[tail].x = tx;
                que[tail].y = ty;
                que[tail].f = head;
                que[tail].s = que[head].s + 1;
                tail++;
            }
            if (tx == p && ty == q)
            {
                flag = 1;
                break;
            }
        }
        if (flag == 1)
            break;
        head++;
    }
    printf("%d", que[tail - 1].s);
    return 0;
}
struct _iobuf
{
    char *_ptr;
    int _cnt;
    char *_base;
    int _flag;
    int _file;
    int _charbuf;
    int _bufsiz;
    char *_tmpfname;
};
typedef struct _iobuf FILE;
/* fopen fclose example */
#include <stdio.h>
int main()
{
    FILE *pFile;
    // 打开文件
    pFile = fopen("myfile.txt", "w");
    // 文件操作
    if (pFile != NULL)
    {
        fputs("fopen example", pFile);
        // 关闭文件
        fclose(pFile);
    }
    return 0;
}
